from graphviz import Digraph

def build_wbs(dot, parent, structure):
    """递归构建WBS图"""
    for key, value in structure.items():
        node_id = key.replace(".", "_")
        dot.node(node_id, key)
        if parent:
            dot.edge(parent, node_id)
        if isinstance(value, dict):
            build_wbs(dot, node_id, value)

# WBS 结构
wbs_structure = {
    "1 软件需求工程项目": {
        "1.1 需求规划阶段": {
            "1.1.1 项目章程": {
                "1.1.1.1 项目背景调研": {},
                "1.1.1.2 项目目标定义": {},
                "1.1.1.3 关键干系人确认": {},
            },
            "1.1.2 项目计划书": {
                "1.1.2.1 计划书引言编写": {},
                "1.1.2.2 项目范围说明书": {},
                "1.1.2.3 进度基准制定": {},
            },
            "1.1.3 十个子计划": {
                "1.1.3.1 风险管理计划": {},
                "1.1.3.2 沟通管理计划": {},
                "1.1.3.3 质量管理计划": {},
                "1.1.3.4 其他子计划框架": {},
            },
            "1.1.4 甘特图制作": {
                "1.1.4.1 任务清单整理": {},
                "1.1.4.2 依赖关系确认": {},
                "1.1.4.3 时间估算校准": {},
            },
            "1.1.5 WBS制作": {
                "1.1.5.1 工作包分解": {},
                "1.1.5.2 编码规则制定": {},
                "1.1.5.3 责任分配矩阵": {},
            },
            "1.1.6 可行性分析": {
                "1.1.6.1 技术可行性评估": {},
                "1.1.6.2 经济可行性测算": {},
                "1.1.6.3 操作可行性验证": {},
            },
            "1.1.7 需求分析": {
                "1.1.7.1 业务需求提炼": {},
                "1.1.7.2 用户需求分类": {},
                "1.1.7.3 系统需求转化": {},
            },
        },
        "1.2 需求开发阶段": {
            "1.2.1 用户场景收集": {
                "1.2.1.1 用户访谈执行": {},
                "1.2.1.2 场景卡片制作": {},
                "1.2.1.3 场景优先级排序": {},
            },
            "1.2.2 UML建模系列": {
                "1.2.2.1 UML概述学习": {
                    "1.2.2.1.1 基本概念理解": {},
                    "1.2.2.1.2 建模原则掌握": {},
                },
                "1.2.2.2 UML基础I": {
                    "1.2.2.2.1 用例图绘制": {},
                    "1.2.2.2.2 类图设计": {},
                },
                "1.2.2.3 UML基础II": {
                    "1.2.2.3.1 时序图构建": {},
                    "1.2.2.3.2 状态图开发": {},
                },
                "1.2.2.4 业务流程建模": {
                    "1.2.2.4.1 AS-IS流程分析": {},
                    "1.2.2.4.2 TO-BE流程设计": {},
                },
            },
            "1.2.3 UML工具应用": {
                "1.2.3.1 工具选型评估": {},
                "1.2.3.2 基础操作训练": {},
                "1.2.3.3 模型版本管理": {},
            },
            "1.2.4 痛点分析工作坊": {
                "1.2.4.1 痛点收集": {},
                "1.2.4.2 痛点聚类": {},
                "1.2.4.3 解决方案脑暴": {},
            },
            "1.2.5 低保真原型设计(v1)": {
                "1.2.5.1 页面流设计": {},
                "1.2.5.2 交互逻辑验证": {},
                "1.2.5.3 原型可用性测试": {},
            },
        },
        "1.3 规格化阶段": {
            "1.3.1 功能需求文档化": {
                "1.3.1.1 功能清单编制": {},
                "1.3.1.2 功能逻辑描述": {},
                "1.3.1.3 输入输出规范": {},
            },
            "1.3.2 非功能需求量化": {
                "1.3.2.1 性能指标定义": {},
                "1.3.2.2 安全要求明确": {},
                "1.3.2.3 兼容性标准设定": {},
            },
            "1.3.3 软件需求规格说明(SRS)": {
                "1.3.3.1 SRS模板选择": {},
                "1.3.3.2 章节内容填充": {},
                "1.3.3.3 需求属性标注": {},
            },
            "1.3.4 用例描述编写": {
                "1.3.4.1 主成功路径": {},
                "1.3.4.2 扩展场景": {},
                "1.3.4.3 异常处理": {},
            },
        },
        "1.4 变更管理阶段": {
            "1.4.1 变更请求处理流程": {
                "1.4.1.1 变更申请表设计": {},
                "1.4.1.2 审批权限设置": {},
                "1.4.1.3 流程可视化建模": {},
            },
            "1.4.2 需求影响分析模板": {
                "1.4.2.1 影响维度定义": {},
                "1.4.2.2 评估标准制定": {},
                "1.4.2.3 模板试用验证": {},
            },
            "1.4.3 需求变更文档": {
                "1.4.3.1 变更日志维护": {},
                "1.4.3.2 基线版本控制": {},
                "1.4.3.3 关联文档更新": {},
            },
        },
        "1.5 质量改进阶段": {
            "1.5.1 需求文档交叉验证": {
                "1.5.1.1 功能与非功能需求映射": {},
                "1.5.1.2 原型与文档一致性检查": {},
                "1.5.1.3 术语表统一校对": {},
            },
        },
        "1.6 最终评审阶段": {
            "1.6.1 文件汇总准备": {
                "1.6.1.1 文档目录生成": {},
                "1.6.1.2 版本一致性确认": {},
                "1.6.1.3 评审包封装": {},
            },
            "1.6.2 最终评审执行": {
                "1.6.2.1 评审议程制定": {},
                "1.6.2.2 问题跟踪表创建": {},
                "1.6.2.3 评审结果签字": {},
            },
        },
    },
}

# 创建有向图
dot = Digraph(format='svg', engine='dot')
dot.attr(rankdir='TB',nodesep="0.5", ranksep="1.0")
dot.node("1_软件需求工程项目", "1 软件需求工程项目", shape='box', style='filled', fillcolor='lightblue')

# 递归构建WBS图
build_wbs(dot, "1_软件需求工程项目", wbs_structure["1 软件需求工程项目"])

# 生成SVG文件
dot.render("wbs_diagram")
